﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MathLib
{
	public static class MathExt
	{

		/// <summary>
		/// Определение чётности числа
		/// </summary>
		/// <param name="number"></param>
		/// <returns></returns>
		public static bool Parity (this int number)
		{			
			return ((number & 1) == 0);
		}

		/// <summary>
		/// определение простого числа
		/// </summary>
		/// <param name="number"></param>
		/// <returns></returns>
		public static bool IsPrime(this int number)
		{
			// Если число чётное
			if (Parity(number) == true)
			{
				// число 2 - исключение (оно чётное)
				if (number == 2)
				{
					return true;
				}
				return false;
			}
			int max = (int)Math.Sqrt(number);
			for (int i = 3; i <= max; i += 2)
			{
				if ((number % i) == 0)
				{
					return false;
				}
			}
			return true;
		}

		/// <summary>
		/// Возведение числа в целую степень
		/// </summary>
		/// <param name="number"></param>
		/// <param name="Power"></param>
		/// <returns></returns>
		public static int Pow(this int number, int Power)
		{
			int res = number;
			for (int i = 1; i < Power; i++)
			{
				res *= number;
			}
			return res;
		}

		/// <summary>
		/// Возведение числа в целую степень
		/// </summary>
		/// <param name="number"></param>
		/// <returns></returns>
		public static int BinaryWeight(this int number)
		{
			int result = 0;
			while (number != 0)
			{
				if (Parity(number) == false)
					result++;
				number = number / 2;
			}
			return result;
		}

	}
}
